<?php


date_default_timezone_set('Europe/Madrid');

class ServiciosProductos {

function TraerCategorias() {
		$sql = "SELECT 
					c.idcategoria,c.categoria,c.precio
				FROM
					se_categorias c
						
				order by 2 desc";
		$res = $this->query($sql,0);
		return	$res;
}

function TraerCategoriasFuncionales() {
		$sql = "SELECT 
					c.idcategoria,c.categoria, COUNT(df.reffactura) AS cant
				FROM
					se_categorias c
						LEFT JOIN
					se_detallefacturas df ON c.idcategoria = df.refproducto
				GROUP BY c.idcategoria,c.categoria
				order by 3 desc";
		$res = $this->query($sql,0);
		return	$res;
}

function TraerCategoriasPorId($id) {
		$sql = "select categoria,precio from se_categorias where idcategoria =".$id;
		$res = array("categoria"=> mysql_result($this->query($sql,0),0,0),"precio"=>mysql_result($this->query($sql,0),0,1));
		return	$res;
}

function insertarCategoria($categoria,$precio) {
		$sql = "insert into se_categorias(idcategoria,categoria,precio) values ('','".utf8_decode($categoria)."',".$precio.")";
		$res = $this->query($sql,1) or die ('');
		return $res;
}

function modificarCategoria($categoria,$id,$precio) {
		$sql = "update se_categorias 
				set 
					categoria = '".utf8_decode($categoria)."',
					precio = ".$precio."
				where idcategoria =".$id;
		$res = $this->query($sql,0) or die ('Hubo un error');
		return $res;	
}

function eliminarCategoria($id) {
		$sqlP = "delete from se_productos where refcategoria =".$id;
		$this->query($sqlP,0);
		$sqlC = "delete from se_categorias where idcategoria =".$id;
		$this->query($sqlC,0);
		return true;
}

function TraerCantidadCategoriasProductos($idCategoria) {
		$sql = "select count(*) 
					from 
						se_categorias c
					inner
					join
						se_productos p
					on	c.idcategoria = p.refcategoria
					where c.idcategoria = ".$idCategoria;
		$res = $this->query($sql,0);
		return $res;
}

function insertarProducto($email,$password,$fechacreacion,$refcategoria) {
		$sql = "INSERT INTO se_productos
							(idproducto,
							 email,
							 password,
							 fechacreacion,
							 refcategoria)
						VALUES
							('',
							'".utf8_decode($email)."',
							'".utf8_decode($password)."',
							'".$fechacreacion."',
							".$refcategoria.");";
		$res = $this->query($sql,1);
		return $res;
}

function insertarDatos($dato1,$dato2,$dato3,$dato4,$dato5,$dato6,$refproducto) {
		
		$sql = "insert into 
						se_datos(iddato,datos,refproducto,numeracion) 
					values
						('','".$dato1."', ".$refproducto.", 1),
						('','".$dato2."', ".$refproducto.", 2),
						('','".$dato3."', ".$refproducto.", 3),
						('','".$dato4."', ".$refproducto.", 4),
						('','".$dato5."', ".$refproducto.", 5),
						('','".$dato6."', ".$refproducto.", 6)";
		$this->query($sql,1);
		return $sql;
}


function modificarProducto($email,$password,$fechacreacion,$refcategoria,$id) {
		$sql = "update se_productos 
					set 
							 email = '".utf8_decode($email)."',
							 password = '".utf8_decode($password)."',
							 fechacreacion = '".$fechacreacion."',
							 refcategoria = ".$refcategoria." 
					where idproducto =".$id;
		$res = $this->query($sql,0) or die ('Hubo un error');
		return $res;
}


function modificarDatos($dato,$refproducto,$numeracion) {
		
		$sql = "update
						se_datos
					set
						datos = '".$dato."'
					where refproducto = ".$refproducto." and numeracion = ".$numeracion;

		return $this->query($sql,0) or die ('Hubo un error');
}


function eliminarProducto($id) {
		$sqlD = "delete from se_datos refproducto =".$id;
		$this->query($sqlD,0);
	
		$sql = "delete from se_productos where idproducto =".$id;
		$this->query($sql,0);
		return true;
}


function TraerProductosTop() {
		$sql =		"select
					p.idproducto,
					p.fechacreacion,
					p.email,
					p.password,
					max(case d.numeracion when 1 then d.datos end) as num1,
					max(case d.numeracion when 2 then d.datos end) as num2,
					max(case d.numeracion when 3 then d.datos end) as num3,
					max(case d.numeracion when 4 then d.datos end) as num4,
					max(case d.numeracion when 5 then d.datos end) as num5,
					max(case d.numeracion when 6 then d.datos end) as num6
					from		se_productos p
					
					inner
					join		se_datos d
					on			p.idproducto = d.refproducto
					
					group by	p.idproducto,
								p.fechacreacion,
								p.email,
								p.password
					
					
					order by    p.idproducto desc,d.numeracion";
		$res = $this->query($sql,0);
		return $res;
	
}

function TraerProductosPorCategoria($idCategoria) {
		$sql =		"select
					p.idproducto,
					p.fechacreacion,
					p.email,
					p.password,
					max(case d.numeracion when 1 then d.datos end) as num1,
					max(case d.numeracion when 2 then d.datos end) as num2,
					max(case d.numeracion when 3 then d.datos end) as num3,
					max(case d.numeracion when 4 then d.datos end) as num4,
					max(case d.numeracion when 5 then d.datos end) as num5,
					max(case d.numeracion when 6 then d.datos end) as num6
					from		se_productos p
					
					left
					join		se_datos d
					on			p.idproducto = d.refproducto
					
					inner
					join		se_categorias c
					on			p.refcategoria = c.idcategoria
					
					where		c.idcategoria = ".$idCategoria."
					
					group by	p.idproducto,
								p.fechacreacion,
								p.email,
								p.password
					
					
					order by    p.idproducto desc,d.numeracion Limit 30";
		$res = $this->query($sql,0);
		return $res;
	
}


function TraerProductosPorId($idProducto) {
		$sql =		"select
					p.idproducto,
					p.fechacreacion,
					p.email,
					p.password,
					max(case d.numeracion when 1 then d.datos end) as num1,
					max(case d.numeracion when 2 then d.datos end) as num2,
					max(case d.numeracion when 3 then d.datos end) as num3,
					max(case d.numeracion when 4 then d.datos end) as num4,
					max(case d.numeracion when 5 then d.datos end) as num5,
					max(case d.numeracion when 6 then d.datos end) as num6,
					p.refcategoria
					from		se_productos p
					
					left
					join		se_datos d
					on			p.idproducto = d.refproducto
					
					inner
					join		se_categorias c
					on			p.refcategoria = c.idcategoria
					
					where		p.idproducto = ".$idProducto."
					
					group by	p.idproducto,
								p.fechacreacion,
								p.email,
								p.password,
								p.refcategoria
					
					
					order by    p.idproducto desc,d.numeracion";
		$res = $this->query($sql,0);
		return $res;
	
}


function BuscarProductosPorPedido($idCategoria,$dato) {
		$sql =		"select
					*
					from
					(select
					p.idproducto,
					p.fechacreacion,
					p.email,
					p.password,
					max(case d.numeracion when 1 then d.datos end) as num1,
					max(case d.numeracion when 2 then d.datos end) as num2,
					max(case d.numeracion when 3 then d.datos end) as num3,
					max(case d.numeracion when 4 then d.datos end) as num4,
					max(case d.numeracion when 5 then d.datos end) as num5,
					max(case d.numeracion when 6 then d.datos end) as num6
					from		se_productos p
					
					left
					join		se_datos d
					on			p.idproducto = d.refproducto
					
					inner
					join		se_categorias c
					on			p.refcategoria = c.idcategoria
					
					group by	p.idproducto,
								p.fechacreacion,
								p.email,
								p.password
					
					
					order by    p.idproducto desc,d.numeracion Limit 30) as d

					where d.num1 like '%".$dato."%' or d.num2 like '%".$dato."%' or d.num3 like '%".$dato."%' or d.num4 like '".$dato."%' or d.num5 like '%".$dato."%' or d.num6 like '%".$dato."%'";
		$res = $this->query($sql,0);
		
		
		return $res;
	
}



function BuscarProductosPorEmail($idCategoria,$email) {
		$sql =		"select
					p.idproducto,
					p.fechacreacion,
					p.email,
					p.password,
					max(case d.numeracion when 1 then d.datos end) as num1,
					max(case d.numeracion when 2 then d.datos end) as num2,
					max(case d.numeracion when 3 then d.datos end) as num3,
					max(case d.numeracion when 4 then d.datos end) as num4,
					max(case d.numeracion when 5 then d.datos end) as num5,
					max(case d.numeracion when 6 then d.datos end) as num6
					from		se_productos p
					
					left
					join		se_datos d
					on			p.idproducto = d.refproducto
					
					inner
					join		se_categorias c
					on			p.refcategoria = c.idcategoria
					
					where		p.email like '%".$email."%'
					
					group by	p.idproducto,
								p.fechacreacion,
								p.email,
								p.password
					
					
					order by    p.idproducto desc,d.numeracion Limit 30";
		$res = $this->query($sql,0);
		
		
		return $res;
	
}

function traerDescarga($nroPedido) {
	$sql = "select descargas from se_facturas where nrofactura = '".$nroPedido."' and cancelado <> 1";	
	$res = $this->query($sql,0);
	if ($res == false) {
		return 'Error al traer datos';
	} else {
		if (mysql_num_rows($res)>0) {
			return mysql_result($res,0,0)+1;
		} else {
			return 1;	
		}
	}
}

function traerPedidos() {
	$sql = "SELECT 
				f.idfactura,
				f.nrofactura,
				c.categoria,
				p.estado,
				DATE_FORMAT(f.fechacreacion,'%d/%m/%Y %H:%i:%s') as fechacreacion,
				u.nombrecompleto,
				f.comentario,
				u.idusuario,
				f.descargas,
				(case when f.ultimadescarga = 1 then 'Si' else 'No' end) as ultimadescarga,
				f.usuarioproporcionado
			FROM
				se_facturas f
					INNER JOIN
				se_pedidos p ON f.idfactura = p.reffactura
					INNER JOIN
				se_usuarios u ON u.idusuario = p.refusuario
					INNER JOIN
				se_detallefacturas df ON f.idfactura = df.reffactura
					INNER JOIN
				se_categorias c ON df.refproducto = c.idcategoria
			where	f.cancelado = 0
			order by  f.fechacreacion desc";
	$res = $this->query($sql,0);
	if ($res == false) {
		return 'Error al traer datos';
	} else {
		return $res;
	}
}



function traerPedidosCostosUsuarios($fechadesde,$fechahasta) {
	$sql = "SELECT 
				u.nombrecompleto,
				count(f.idfactura),
				u.idusuario
			FROM
				se_facturas f
					INNER JOIN
				se_pedidos p ON f.idfactura = p.reffactura
					INNER JOIN
				se_detallefacturas fd ON f.idfactura = fd.reffactura
					INNER JOIN
				se_usuarios u ON u.idusuario = p.refusuario
					INNER JOIN
				se_detallefacturas df ON f.idfactura = df.reffactura
					INNER JOIN
				se_categorias c ON df.refproducto = c.idcategoria
			where	f.cancelado = 0 and p.estado = 'ENTREGADO' and u.refroll = 2 and f.fechacreacion BETWEEN '".$fechadesde."' and '".$fechahasta."' 
			group by u.nombrecompleto,u.idusuario";

	
	//return $sql;
	
	$res = $this->query($sql,0);
	if ($res == false) {
		return 'Error al traer datos';
	} else {
		return $res;
	}
}


function traerPedidosCostos($fechadesde,$fechahasta,$usuario) {
	$sql = "SELECT 
				f.idfactura,
				f.nrofactura,
				c.categoria,
				p.estado,
				f.fechacreacion,
				u.nombrecompleto,
				f.comentario,
				fd.precioventa
			FROM
				se_facturas f
					INNER JOIN
				se_pedidos p ON f.idfactura = p.reffactura
					INNER JOIN
				se_detallefacturas fd ON f.idfactura = fd.reffactura
					INNER JOIN
				se_usuarios u ON u.idusuario = p.refusuario
					INNER JOIN
				se_detallefacturas df ON f.idfactura = df.reffactura
					INNER JOIN
				se_categorias c ON df.refproducto = c.idcategoria
			where	f.cancelado = 0 and p.estado = 'ENTREGADO' and u.refroll = 2 and f.fechacreacion BETWEEN '".$fechadesde."' and '".$fechahasta."' ";
	if (($usuario != '') && ($usuario != '0')) {
		$sql = $sql." and u.idusuario = ".$usuario." ";	
	}

	
	//return $sql;
	
	$res = $this->query($sql,0);
	if ($res == false) {
		return 'Error al traer datos';
	} else {
		return $res;
	}
}

function traerPedidosAbiertos($refcliente) {
	$sql = "select 
				f.nrofactura,
				f.domicilio,
				f.fechacreacion,
				es.estado,
				es.icono,
				f.idfactura,
				p.idpedido,
				concat(u.apellido,', ',u.nombre) as nombrecompleto,
				p.fechaentrega
			from
				se_pedidos p
					inner join
				se_facturas f ON p.reffactura = f.idfactura
					inner join
				se_estadoenvio es ON es.idestadoenvio = p.refestado
					inner join
				se_usuarios u ON u.idusuario = f.refcliente
			where
				es.estado <> 'Recibido' and es.estado <> 'Cancelado' 
				and
				u.idusuario = ".$refcliente;
	$res = $this->query($sql,0);
	if ($res == false) {
		return 'Error al traer datos';
	} else {
		return $res;
	}
}

function traerPedidosCerrados() {
	$sql = "SELECT 
				f.idfactura,
				f.nrofactura,
				c.categoria,
				p.estado,
				f.fechacreacion,
				u.nombrecompleto,
				f.comentario,
				f.descargas,
				(case when f.ultimadescarga = 1 then 'Si' else 'No' end) as ultimadescarga,
				f.usuarioproporcionado
			FROM
				se_facturas f
					INNER JOIN
				se_pedidos p ON f.idfactura = p.reffactura
					INNER JOIN
				se_usuarios u ON u.idusuario = p.refusuario
					INNER JOIN
				se_detallefacturas df ON f.idfactura = df.reffactura
					INNER JOIN
				se_categorias c ON df.refproducto = c.idcategoria
			where	f.cancelado = 1
			order by  f.fechacreacion desc";
	$res = $this->query($sql,0);
	if ($res == false) {
		return 'Error al traer datos';
	} else {
		return $res;
	}
}


function traerPedidosPorId($id) {
	$sql = "select 
				f.nrofactura,
				f.domicilio,
				f.fechacreacion,
				es.estado,
				es.icono,
				f.idfactura,
				concat(u.apellido,', ',u.nombre) as nombrecompleto,
				p.idpedido,
				es.idestadoenvio,
				p.fechaentrega
			from
				se_pedidos p
					inner join
				se_facturas f ON p.reffactura = f.idfactura
					inner join
				se_estadoenvio es ON es.idestadoenvio = p.refestado
					inner join
				se_usuarios u ON u.idusuario = f.refcliente
			where
				p.idpedido = ".$id;
	$res = $this->query($sql,0);
	if ($res == false) {
		return 'Error al traer datos';
	} else {
		return $res;
	}
}



function insertarPedido($refusuario,$reffactura,$refestado) {
	$sql = "insert into se_pedidos(idpedido,reffactura,estado,fechacreacion,fechamodificacion,refusuario,fechaentrega)
			VALUES
			('',
			".$reffactura.",
			'".utf8_decode($refestado)."',
			'".date('Y-m-d H:i:s')."',
			'".date('Y-m-d H:i:s')."',
			".$refusuario.",
			'null')";
	$res = $this->query($sql,1);
	if ($res == false) {
		return 'Error al insertar datos';
	} else {
		return $res;
	}
}

function modificarPedido($id,$refestado,$fechaentrega) {
	$sql = "update se_pedidos
			SET
				refestado = '".utf8_decode($refestado)."',
				fechamodificacion = '".date('Y-m-d H:i:s')."',
				fechaentrega = '".$fechaentrega."'
			where idpedido =".$id;
	$res = $this->query($sql,0);
	if ($res == false) {
		return 'Error al modificar datos';
	} else {
		return '';
	}		
}

function insertarEstado($nombre) {
	$sql = "insert into se_estadoenvio(idestadoenvio, estado, icono)
			values ('','".utf8_decode($nombre)."','')";
	$res = $this->query($sql,1);
	if ($res == false) {
		return 'Error al insertar datos';
	} else {
		return $res;
	}
}

function modificarEstado($id,$nombre) {
	$sql = "update se_estadoenvio 
			set estado = '".utf8_decode($nombre)."'
			where idestadoenvio = ".$id;
	$res = $this->query($sql,0);
	if ($res == false) {
		return 'Error al modificar datos';
	} else {
		return '';
	}
}

function eliminarEstado($id) {
	$sql = "delete from se_estadoenvio where idestadoenvio = ".$id;
	$res = $this->query($sql,0);
	if ($res == false) {
		return 'Error al eliminar datos';
	} else {
		return '';
	}
}

function traerEstados() {
	$sql = "select 
				idestadoenvio, estado, icono
			from
				se_estadoenvio";
	$res = $this->query($sql,0);
	if ($res == false) {
		return 'Error al traer datos';
	} else {
		return $res;
	}
}

function traerEstadosPorId($id) {
	$sql = "select 
				idestado,estado, icono
			from
				se_estadoenvio
			where idestadoenvio =".$id;
	$res = $this->query($sql,0);
	if ($res == false) {
		return 'Error al traer datos';
	} else {
		return $res;
	}
}



function generarFactura() {
	$sql = "select max(idfactura) from se_facturas";
	$res = $this->query($sql,0);
	if (mysql_num_rows($res)>0) {
		$fact = "CAC".str_pad(mysql_result($res,0,0)+1, 7, "0", STR_PAD_LEFT); 
	} else {
		$fact = "CAC0000001";
	}
	return $fact;
}

function insertarFactura($nrofactura,$refcliente,$domicilio,$fechaentrega,$producto,$comentario,$refestado,$descargas,$ultimadescarga,$usuarioproporcionado) {
	//$nrofactura = $this->generarFactura();
	$sql	= "INSERT INTO se_facturas
					(idfactura,
					nrofactura,
					fechacreacion,
					refcliente,
					domicilio,
					cancelado,
					comentario,
					descargas,
					ultimadescarga,
					usuarioproporcionado)
				VALUES
					('',
					'".$nrofactura."',
					'".date('Y-m-d H:i:s')."',
					'".$refcliente."',
					'',
					0,
					'".utf8_decode($comentario)."',
					".$descargas.",
					".$ultimadescarga.",
					'".$usuarioproporcionado."');";
	$res = $this->query($sql,1);
	if ($res == false) {
		return 'Error al insertar datos';
	} else {
		$this->insertarDetalle($res,$producto);
		$this->insertarPedido($refcliente,$res,$refestado);
		return $res;
	}
		
}

function modificarFactura($id,$domicilio) {
	$sql = "update se_facturas
			SET
				domicilio = '".utf8_decode($domicilio)."',
				cancelado = 0
			where idfactura =".$id;
	$res = $this->query($sql,0);
	if ($res == false) {
		return 'Error al modificar datos';
	} else {
		return '';
	}		
}


function eliminarFactura($id) {
	$sql = "update se_facturas
			SET
				cancelado = 1
			where idfactura =".$id;
	$res = $this->query($sql,0);
	if ($res == false) {
		return 'Error al eliminar datos';
	} else {
		return '';
	}		
}


function insertarDetalle($reffactura,$producto) {
	
	$precio = $this->TraerCategoriasPorId($producto);
	
	$sql = "INSERT INTO se_detallefacturas
				(iddetallefactura,
				reffactura,
				refproducto,
				precioventa,
				cantidad)
			Values ('',".$reffactura.", ".$producto.", ".$precio['precio'].", 1)";
				
	//return $sql;
	$res = $this->query($sql,1);
	if ($res == false) {
		return 'Error al insertar datos';
	} else {
		return $res;
	}
}

Function query($sql,$accion) {
		
		
		
		require_once 'appconfig.php';

		$appconfig	= new appconfig();
		$datos		= $appconfig->conexion();	
		$hostname	= $datos['hostname'];
		$database	= $datos['database'];
		$username	= $datos['username'];
		$password	= $datos['password'];

		
		$conex = mysql_connect($hostname,$username,$password) or die ("no se puede conectar".mysql_error());
		
		mysql_select_db($database);
		
		$result = mysql_query($sql,$conex);
		if ($accion && $result) {
			$result = mysql_insert_id();
		}
		mysql_close($conex);
		return $result;
		
	}

}




?>